package qreasymarket.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

import javax.security.auth.login.LoginException;
import javax.servlet.jsp.tagext.TryCatchFinally;

import qreasymarket.excepcion.DAOExcepcion;
import qreasymarket.excepcion.LoginExcepcion;
import qreasymarket.modelo.DetallePedido;
import qreasymarket.modelo.ListaCompra;
import qreasymarket.util.ConexionBD;

public class DetallePedidoDAO extends BaseDAO {

	public Collection<DetallePedido> CapturarId(int IdListaCompra)
			throws DAOExcepcion {

		String query = "SELECT detalle_lista_compra.id_lista_compra,producto.nombre_producto,producto.precio,detalle_lista_compra.cantidad,(producto.precio*detalle_lista_compra.cantidad) as subtotal from producto INNER JOIN detalle_lista_compra ON producto.id_producto= detalle_lista_compra.id_producto where detalle_lista_compra.id_lista_compra like ?";

		Collection<DetallePedido> detallepedido = new ArrayList<DetallePedido>();

		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, IdListaCompra);
			rs = stmt.executeQuery();

			while (rs.next()) {
				DetallePedido vo = new DetallePedido();

				vo.setIdListaCompra(rs.getInt("id_lista_compra"));
				vo.setNombreProducto(rs.getString("nombre_producto"));
				vo.setPrecio(rs.getDouble("precio"));
				vo.setCantidad(rs.getInt("cantidad"));
				vo.setSubtotal(rs.getDouble("subtotal"));

				detallepedido.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return detallepedido;
	}

	public DetallePedido obtener(int IdListaCompra) throws DAOExcepcion {
		DetallePedido vo = new DetallePedido();

		String query = "SELECT detalle_lista_compra.id_lista_compra,producto.nombre_producto,producto.precio,detalle_lista_compra.cantidad,(producto.precio*detalle_lista_compra.cantidad) as subtotal from producto INNER JOIN detalle_lista_compra ON producto.id_producto= detalle_lista_compra.id_producto where detalle_lista_compra.id_lista_compra=?";

		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {

			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, IdListaCompra);
			rs = stmt.executeQuery();

			if (rs.next()) {

				vo.setIdListaCompra(rs.getInt(1));
				vo.setNombreProducto(rs.getString(2));
				vo.setPrecio(rs.getDouble(3));
				vo.setCantidad(rs.getInt(4));
				vo.setSubtotal(rs.getDouble(5));

			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public DetallePedido insertar(DetallePedido vo) throws DAOExcepcion {

		
		
		String query = "INSERT INTO detalle_lista_compra(id_lista_compra,id_producto,fecha,cantidad,estado) VALUES (?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getIdListaCompra());
			stmt.setInt(2, vo.getIdProducto());
			stmt.setString(3, vo.getFechaCreacion());
			stmt.setDouble(4, vo.getCantidad());
			stmt.setString(5, vo.getEstado());                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

}                                                                                    
